﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Tibet.Entidades;
using Tibet.Logica.Comandos;
using Tibet.Logica.FabricaLogica;


namespace Tibet.Logica.Comandos.ComandoMotorRegla
{
    public class ConsultarDocumentEstructuraDobleSlash: ConsultarDocumentEstructura
    {
        public override void Ejecutar()
        //Valida que los comentarios del archivo mantenga una estructura correcta
        //(// o /**/ dentro del proyecto
        {
            //variables iniciales
            int AnchoLinea; //Almacena el tamaño de cada linea del archivo.
            int i = 0;     //contador de iteraciones para los ciclos(for).   
            int LineaActual = 0; //lineaactual que se esta leyendo.
            Resultado resp = new Resultado();//inicializo el objeto que sera retornado
            bool inicioBloqueComentario = false; //inicializo este auxiliar en falso, este me ayudara en determinar si se abrio un bloque /* y deba cerrarlo

            //se inicializa resp asumiendo caso de fallo(no cumple con la regla)
            resp.Fecha = new DateTime();
            resp.Fecha = DateTime.Now;
            resp.Respuesta = false;
            resp.Mensaje = "El archivo esta mal documentado";
            resp.Linea = 0;

            try
            {
                List<EntidadString> listaStr = new List<EntidadString>();

                for (int j = 0; j < ListaEntidad.Count; j++)
                {
                    listaStr.Add((EntidadString)ListaEntidad.ElementAt(j));
                }


                foreach (EntidadString linea in listaStr)   //Recorro la lista linea por linea
                {
                    LineaActual++;                  //Aumenta el contador de la linea.
                    if (linea.Linea.Length != 0)          //si la linea no esta vacia entro y lo analizo
                    {
                        AnchoLinea = linea.Linea.Length;  //indicamos la cantidad maxima de espacios que tiene la linea
                        i = 0;                      //reiniciamos el contador;
                        while (i < AnchoLinea)      //Recorremos la linea caracter por caracter  
                        {
                            if (linea.Linea[i] == '/' && linea.Linea[i + 1] == '/')    //si encontramos la cadena //
                            {
                                resp.Linea = LineaActual;
                                resp.Respuesta = true;
                                resp.Mensaje = "El archivo esta documentado correctamente";
                                Entidad = (resp as Entidad);
                            }
                                                      
                            i++;
                        }

                    }
                }
            }
            catch (Exception e)
            {
                resp.Linea = LineaActual;
                resp.Respuesta = false;
                resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                Entidad = (resp as Entidad);
            }
            Entidad = (resp as Entidad);
        }//fin medoto
    }
}
